home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
The World of Computer Software.iso
/
ftlogo.zip
/
HANOI.LF
< prev
next >
Wrap
Text File
|
1988-06-11
|
2KB
|
184 lines
PPROP "FTLOGO "BURY "TRUE
PPROP ".SYSTEM "BURY "TRUE
TO MOVETO :POS
REFRESH
MOVETO1 ITEM :POS :POSLIST
REFRESH
END
TO TAKE
REFRESH
MOTOR 3 1
REFRESH
END
TO PUT
REFRESH
MOTOR 3 0
REFRESH
END
TO MOVETO1 :X
LOCAL "Y
LOCAL "D
LABEL "LAB
REFRESH
MAKE "Y ARMPOS
REFRESH
MAKE "D ABS (:X - :Y)
REFRESH
IF :D < 2 [STOP]
REFRESH
TEST :Y > :X
REFRESH
IFT [MOTOR 1 2]
REFRESH
IFF [MOTOR 1 1]
REFRESH
MAKE "Y ARMPOS
REFRESH
MAKE "D ABS (:X - :Y)
REFRESH
IF :D < 11 [MOTOR 1 0]
REFRESH
GO "LAB
END
TO ARMPOS
OUTPUT POTI 1
END
TO KEYSPOS
KEYSTO
OP ARMPOS
END
TO KEYSTO
LOCAL "INCHAR
MAKE "INCHAR READCHAR
IF :INCHAR = "S [STOP]
IF OR (:INCHAR = "R) (:INCHAR = "L) [REPOSITION :INCHAR]
KEYSTO
END
TO REPOSITION :INCHAR
IF :INCHAR = "R [MOTOR 1 1]
IF :INCHAR = "L [MOTOR 1 2]
WAIT 1
MOTOR 1 0
END
TO ABS :X
IF :X > 0 [OP :X]
OP -1 * :X
END
TO MOVE :FROM :DEST
REFRESH
UP
REFRESH
MOVETO :FROM
REFRESH
DOWN
RECYCLE
REFRESH
TAKE
REFRESH
UP
REFRESH
MOVETO :DEST
REFRESH
DOWN
REFRESH
PUT
RECYCLE
REFRESH
UP
REFRESH
END
TO TOWER1 :FROM :DEST :INTERMED :HEIGHT
REFRESH
IF :HEIGHT = 1 [MOVE :FROM :DEST REFRESH STOP]
REFRESH
TOWER1 :FROM :INTERMED :DEST :HEIGHT - 1
REFRESH
MOVE :FROM :DEST
REFRESH
TOWER1 :INTERMED :DEST :FROM :HEIGHT - 1
REFRESH
END
TO UP
RUNTOSWITCH 2 2 2
END
TO DOWN
RUNTOSWITCH 1 2 1
END
TO RUNTOSWITCH :SW :MOT :DIR
LABEL "LAB
REFRESH
TEST SWITCH :SW
REFRESH
IFT [MOTOR :MOT 0]
REFRESH
IFT [STOP]
REFRESH
MOTOR :MOT :DIR
REFRESH
GO "LAB
END
TO START
LOCAL "A
CLEARTEXT
INIT
UP
PR [DO YOU WANT TO MARK]
PR [THE TOWER POSITIONS ANEW? (Y/N)]
MAKE "A RC
TEST :A = "Y
IFT [POSTEXT]
IFT [MAKPOSLIST 3]
PR []
PR [HOW MANY DISKS?]
MAKE "HEIGHT FIRST READLIST
PR []
PR [WHERE ARE THE DISKS NOW?]
MAKE "FROM FIRST READLIST
PR []
PR [WHERE SHALL THEY BE PUT?]
MAKE "DEST FIRST READLIST
PR []
MAKE "INTERMED (QUOTIENT 6 (:FROM * :DEST))
TOWER1 :FROM :DEST :INTERMED :HEIGHT
END
TO MAKPOSLIST1 :NUM :MAXNUM
IF :NUM > :MAXNUM [STOP]
TYPE [PLEASE POSITION THE ARM TO TOWER]
TYPE CHAR 32
PR :NUM
MAKE "POSLIST LPUT KEYSPOS :POSLIST
REPEAT 100 []
MAKPOSLIST1 :NUM + 1 :MAXNUM
END
TO MAKPOSLIST :NUM
MAKE "POSLIST []
MAKPOSLIST1 1 :NUM
END
TO POSTEXT
PR []
PR [USE R OR L KEY TO POSITION ARM]
PR [USE S KEY TO MARK POSITION]
PR []
END
MAKE "POSLIST [123 106 87]